# -*- coding: UTF-8 -*-
# Author: Damon(wuud1)
# CreateDate: 
# Message:


# import re
# s = '定购时规定的车辆标识号 (VIN) 起点 改进实施日期 11074UW 终点 改进实施日期 11572UW'
# res = re.sub(r'起点 改进实施日期 \w*\b|终点 改进实施日期 \w*\b', '', s)
# print(res)
# a = ['a', 'b']
# n = set(map(lambda x: '不带'+x, a))
# b = ['x', 'xx', 'a']
# b.extend(n)
# print(b)
# print(set(a).union(set(b)))
import re

extra_info = '- FIRM 5门轿车 和 低/高 和 中华人民共和国 和 EB2FB UE6 50KW 喷射 和 车轮安装15英寸 和 不带驾驶室保护板 和 不带空调 起点 OPR 14651 终点 OPR 14762 或者  终点 OPR 14650 除了 不带车身下的保护层 或者 M1-N1 混合车型 和 低/高 和 EB2FB UE6 50KW 喷射 和 车轮安装15英寸 和 不带驾驶室保护板 和 不带空调 起点 OPR 14651 终点 OPR 14762 或者  终点 OPR 14650 除了 不带车身下的保护层 或者 FIRM 5门轿车 和 中等、中等 和 EB2FB UE6 50KW 喷射 和 不带车身下的保护层 起点 OPR 14651 终点 OPR 14762 或者  终点 OPR 14650 或者 M1-N1 混合车型 和 中等、中等 和 EB2FB UE6 50KW 喷射 和 不带车身下的保护层 起点 OPR 14651 终点 OPR 14762 或者  终点 OPR 14650 或者 FIRM 5门轿车 和 低/高 和 EB2FB UE6 50KW 喷射 和 车轮安装15英寸 和 行李舱分隔网 和 不带空调 起点 OPR 14651 终点 OPR 14762 或者  终点 OPR 14650 除了 发动机下面板金保护件 或者 M1-N1 混合车型 和 低/高 和 EB2FB UE6 50KW 喷射 和 车轮安装15英寸 和 行李舱分隔网 和 不带空调 起点 OPR 14651 终点 OPR 14762 或者  终点 OPR 14650 除了 发动机下面板金保护件 或者 FIRM 5门轿车 和 低/高 和 EB2FB UE6 50KW 喷射 和 不带车身下的保护层 和 不带空调 终点 OPR 14650 或者 M1-N1 混合车型 和 低/高 和 EB2FB UE6 50KW 喷射 和 不带车身下的保护层 和 不带空调 终点 OPR 14650 或者 M1-N1 混合车型 和 低/高 和 EB2FB UE6 50KW 喷射 和 不带车身下的保护层 和 车轮安装15英寸 和 不带驾驶室保护板 起点 OPR 14651 终点 OPR 14762 或者  终点 OPR 14650 除了 不带空调'


def format_ex(ex_raw, return_rules=False):
    if ex_raw.strip("- ") == '':
        return []
    ex_raw = ex_raw.replace("或者", "#or#").replace(" 和 ", "#and#").replace("除了", "#not#").strip('-').strip()
    ex_l1 = ex_raw.split("#or#")
    _l = []
    all_rules = []
    for i in ex_l1:
        # print(i.strip('-').strip(''))
        #####
        _dict= {
            "OPR":"-",
            "date":"-",
            "motor":"-",
            "change_date":"-",
            "exc_sa":[],  # 车架号存在此列表中任意一个条件,直接不通过
            "app_sa":[],
            'use_life':'0'  # 0代表无限制
        }
        i = i.strip('-').strip('')
        # 获取OPR
        res = re.findall(r'起点 OPR .+?\b', i)
        OPR_s = res[0].replace(" ", "").replace("起点OPR", "") if res else ''
        res = re.findall(r'终点 OPR .+?\b', i)
        OPR_e = res[0].replace(" ", "").replace("终点OPR", "") if res else ''
        _dict["OPR"] = OPR_s+'-'+OPR_e

        # 获取change_date
        res = re.findall(r'起点 改进实施日期 .+?\b', i)
        change_s = res[0].replace(" ", "").replace("起点改进实施日期", "") if res else ''
        res = re.findall(r'终点 改进实施日期 .+?\b', i)
        change_e = res[0].replace(" ", "").replace("终点改进实施日期", "") if res else ''
        change_date = change_s + '-' + change_e
        _dict['change_date'] = change_date

        # 获取motor
        res = re.findall(r'起点 发动机 .+?\b', i)
        motor_s = res[0].replace(" ", "").replace("起点发动机", "") if res else ''
        res = re.findall(r'终点 发动机 .+?\b', i)
        motor_e = res[0].replace(" ", "").replace("终点发动机", "") if res else ''
        motor = motor_s + '-' + motor_e
        _dict['motor'] = motor

        # 获取date
        res = re.findall(r'起点 日期 \d+?\b', i)
        date_s = res[0].replace(" ", "").replace("起点日期", "") if res else ''
        res = re.findall(r'终点 日期 \d+?\b', i)
        date_e = res[0].replace(" ", "").replace("终点日期", "") if res else ''
        date = date_s + '-' + date_e
        _dict['date'] = date

        # 获取use_life
        res = re.findall(r'使用年限 >= \d', i)
        use_life = res[0].replace(" ", "").replace("使用年限>=", "") if res else '0'
        _dict['use_life'] = use_life

        # 上述信息获取完,替换掉上述内容
        i = re.sub(r'终点.*?\d\b|起点.*?\d\b', '', i).strip('-').strip()
        i = re.sub(r'起点 改进实施日期 \w+\b|终点 改进实施日期 \w+\b', '', i).strip('-').strip()
        i = re.sub(r'使用年限 >= \d\b', '', i).strip('-').strip()

        # 根据第一个#not#分割, 分割后第一个就是app_sa内容, 第二个就是exc内容
        if '#not#' in i:
            and_str = i.split('#not#', 1)[0]
            not_str = i.split('#not#', 1)[1]
            and_l = and_str.split("#and#")
            not_l = not_str.split("#not#")
            for a in and_l:
                a = a.strip("-").strip().strip("-").strip().strip("-").strip().replace("#and#", "").replace("#or#", "").replace("#not#", "").replace('"', '').replace("'", "")
                if a == '':
                    continue
                _dict['app_sa'].append(a)
                all_rules.append(a)
            for n in not_l:
                n = n.strip("-").strip().strip("-").strip().strip("-").strip().replace("#and#", "").replace("#or#", "").replace("#not#", "").replace('"', '').replace("'", "")
                if n == '':
                    continue
                _dict['exc_sa'].append(n)
                all_rules.append(n)

        else:
            and_l = i.split("#and#")
            for a in and_l:
                a = a.strip("-").strip().strip("-").strip().strip("-").strip().replace("#and#", "").replace("#or#", "").replace("#not#", "").replace('"', '').replace("'", "")
                if a == '':
                    continue
                _dict['app_sa'].append(a)
                all_rules.append(a)
        _l.append(_dict)
        # print(_dict)
    if not return_rules:
        return _l
    else:
        return list(set(all_rules))


extra_info = '- 前后侧扶手+拉手A 和 方向盘左置 起点 日期 20170828 或者 终点 日期 20170827'
# extra_info = '-  起点 改进实施日期 1104677 终点 改进实施日期 1137977 或者  起点 改进实施日期 10647UW'
# extra_info = '- DV6FE PEF型柴油机 和 STT型5-速手动变速箱 和 带盲点监控 和 柴油型燃料 和 欧6车辆车辆技术排放控制标准 和 带停止和起动起动机 起点 OPR 14784 除了 带乘客车厢加热器 除了 前部进入+行李箱+无钥匙进入起动 或者 DV6FD PEF柴油机 和 STT型5-速手动变速箱 和 带盲点监控 和 柴油型燃料 和 欧6车辆车辆技术排放控制标准 和 带停止和起动起动机 起点 OPR 14784 除了 带乘客车厢加热器 除了 前部进入+行李箱+无钥匙进入起动'
# extra_info = '-  起点 OPR 10402 和 使用年限 >= 2'

print(format_ex(extra_info, return_rules=True))



# s = 'FIRM 5门轿车#and#低/高#and#中华人民共和国#and#EB2FB UE6 50KW 喷射#and#车轮安装15英寸#and#不带驾驶室保护板#and#不带空调 起点 OPR 14651 终点 OPR 14762'
# res = re.findall(r'起点 OPR .+?\b', s)
# print(res)

# s = '- DV6FE PEF型柴油机 和 STT型5-速手动变速箱 和 带盲点监控 和 柴油型燃料 和 欧6车辆车辆技术排放控制标准 和 带停止和起动起动机 起点 OPR 14784 除了 带乘客车厢加热器 除了 前部进入+行李箱+无钥匙进入起动 或者 DV6FD PEF柴油机 和 STT型5-速手动变速箱 和 带盲点监控 和 柴油型燃料 和 欧6车辆车辆技术排放控制标准 和 带停止和起动起动机 起点 OPR 14784 除了 带乘客车厢加热器 除了 前部进入+行李箱+无钥匙进入起动'
# s = s.strip('-').strip()
# s = s.split("或者")
# for i in s:
#     and_str = i.split("除了", 1)[0]
#     not_str = i.split("除了", 1)[1]
#     print(and_str)
#     print(not_str)


# s = '-  起点 改进实施日期 1104677 终点 改进实施日期 1137977 或者  起点 改进实施日期 10647UW'
# s = s.strip('-').strip()
# s = s.split("或者")
# for i in s:
#     res = re.findall(r'起点 改进实施日期 .+?\b', i)
#     change_s = res[0].replace(" ", "").replace("起点改进实施日期", "") if res else ''
#     res = re.findall(r'终点 改进实施日期 .+?\b', i)
#     change_e = res[0].replace(" ", "").replace("终点改进实施日期", "") if res else ''
#     change_date = change_s +'-'+ change_e
#     print(change_date)


# s = '- IFL5发动机降污染(税收鼓励) 终点 发动机 1148572 和IFL5发动机降污染(税收鼓励) 起点 发动机 1148573'
# s = s.strip('-').strip()
# s = s.split("或者")
# for i in s:
#     res = re.findall(r'起点 发动机 .+?\b', i)
#     motor_s = res[0].replace(" ", "").replace("起点发动机", "") if res else ''
#     res = re.findall(r'终点 发动机 .+?\b', i)
#     motor_e = res[0].replace(" ", "").replace("终点发动机", "") if res else ''
#     motor = motor_s +'-'+ motor_e
#     print(motor)


# s = '- 前后侧扶手+拉手A 和 方向盘左置 起点 日期 20170828 或者  终点 日期 20170827'
# s = s.strip('-').strip()
# s = s.split("或者")
# for i in s:
#     res = re.findall(r'起点 日期 \d+?\b', i)
#     date_s = res[0].replace(" ", "").replace("起点日期", "") if res else ''
#
#     res = re.findall(r'终点 日期 \d+?\b', i)
#     date_e = res[0].replace(" ", "").replace("终点日期", "") if res else ''
#     date = date_s + '-' + date_e
#     print(date)




